package main

import (
	"fmt"
	"time"
)

/**
基于 Channel 编写一个简单的单线程生产者消费者模型
• 队列：
队列长度10，队列元素类型为 int
• 生产者：
每1秒往队列中放入一个类型为 int 的元素，队列满时生产者可以阻塞
• 消费者：
每一秒从队列中获取一个元素并打印，队列为空时消费者阻塞
*/

func lesson12() {

	//创建一个channel,缓存长度是10
	mq := make(chan int, 10)
	//生产者
	go func() {
		for i := 0; i < 20; i++ {

			fmt.Println("生产者生产了一个产品:", i)
			mq <- i
			time.Sleep(1 * time.Second * time.Duration(1))

		}
	}()

	//消费者
	go func() {
		for {
			x := <-mq
			fmt.Println("消费者接收到了一个产品:", x)
			time.Sleep(2 * time.Second * time.Duration(1))
		}

	}()

	time.Sleep(100 * time.Second * time.Duration(1))

}
